package cn.vehicle.mapper;

import cn.vehicle.domains.entity.SysUserRoleEntity;
import java.util.List;

/**
 * 用户角色关联Mapper接口
 * 处理用户与角色的绑定、解绑及关联关系查询
 */
public interface SysUserRoleMapper {

    /**
     * 添加单个用户角色关联（用户绑定单个角色）
     * @param userRoleEntity 包含userId和roleId的关联实体
     * @return 影响行数（1：成功，0：失败，可能因重复绑定）
     */
    int insertUserRole(SysUserRoleEntity userRoleEntity);

    /**
     * 批量添加用户角色关联（用户绑定多个角色）
     * @param userRoleList 包含userId和多个roleId的关联实体列表
     * @return 影响行数（成功绑定的角色数量）
     */
    int batchInsertUserRoles(List<SysUserRoleEntity> userRoleList);

    /**
     * 解除单个用户角色关联（用户解绑单个角色）
     * @param userRoleEntity 包含userId和roleId的关联实体
     * @return 影响行数（1：成功，0：失败，可能关联不存在）
     */
    int deleteUserRole(SysUserRoleEntity userRoleEntity);

    /**
     * 根据用户ID解除所有角色关联（用户解绑所有角色）
     * @param userId 用户ID
     * @return 影响行数（解除的角色数量）
     */
    int deleteRolesByUserId(Long userId);

    /**
     * 根据角色ID解除所有用户关联（角色解绑所有用户）
     * @param roleId 角色ID
     * @return 影响行数（解除的用户数量）
     */
    int deleteUsersByRoleId(Long roleId);

    /**
     * 校验用户角色关联是否已存在（避免重复绑定）
     * @param userRoleEntity 包含userId和roleId的关联实体
     * @return 存在数量（1：已存在，0：不存在）
     */
    int checkUserRoleExists(SysUserRoleEntity userRoleEntity);

    /**
     * 根据用户ID查询关联的所有角色ID
     * @param userId 用户ID
     * @return 角色ID列表（无关联则返回空列表）
     */
    List<Long> selectRoleIdsByUserId(Long userId);

    /**
     * 根据角色ID查询关联的所有用户ID
     * @param roleId 角色ID
     * @return 用户ID列表（无关联则返回空列表）
     */
    List<Long> selectUserIdsByRoleId(Long roleId);
}